package com.konsung.greendaoUtil;

import android.content.Context;

import com.konsung.util.constant.GlobalConstant;

import java.io.File;

/**
 * 类功能：数据库管理类
 */

public class GreenDaoManager {

    private DaoMaster daoMaster;

    private DaoSession daoSession;

    private static GreenDaoManager instance; //单例

    /**
     * dao管理器构造器
     * @param context 上下文
     */
    private GreenDaoManager(Context context) {
        if (instance == null) {
            String dbDir = GlobalConstant.DATABASE_FILE;
            File baseFile = new File(dbDir);
            // 目录不存在则自动创建目录
            if (!baseFile.exists()) {
                baseFile.mkdirs();
            }
            // 此处openhelper为自动生成开发所使用，发布版本需自定义
            MySQLiteOpenHelper devOpenHelper = new MySQLiteOpenHelper(new GreenDaoContext(context),
                    GlobalConstant.DATABASE_NAME, null);
            //GreenDaoContext为创建数据库路径使用
            daoMaster = new DaoMaster(devOpenHelper.getWritableDatabase());
            daoSession = daoMaster.newSession();
        }
    }

    /**
     * 单例获取dao管理器
     * @param context 上下文
     * @return dao管理器
     */
    public static GreenDaoManager getInstance(Context context) {
        if (instance == null) {
            synchronized (GreenDaoManager.class) { //保证异步处理安全操作
                if (instance == null) {
                    instance = new GreenDaoManager(context);
                }
            }
        }
        return instance;
    }

    /**
     * 获取居民dao
     * @param context 上下文
     * @return 民dao
     */
    public static PatientBeanDao getPatientDao(Context context) {
        return getInstance(context).getSession().getPatientBeanDao();
    }

    /** 获取配置dao
     * @param context 上下文
     * @return dao
     */
    public static ConfigDtoDao getConfigDao(Context context) {
        return getInstance(context).getSession().getConfigDtoDao();
    }

    /**
     * 获取测量dao
     * @param context 上下文
     * @return 测量dao
     */
    public static MeasureDataBeanDao getMeasureDao(Context context) {
        return getInstance(context).getSession().getMeasureDataBeanDao();
    }

    /**
     * 获取 DaoMaster
     * @return DaoMaster
     */
    public DaoMaster getMaster() {
        return daoMaster;
    }

    /**
     * 获取 DaoSession
     * @return DaoSession
     */
    public DaoSession getSession() {
        return daoSession;
    }

    /**
     * 获取 新的DaoSession
     * @return DaoSession
     */
    public DaoSession getNewSession() {
        daoSession = daoMaster.newSession();
        return daoSession;
    }
}

